package com.example.lotterysystem.service.impl;

import com.example.lotterysystem.common.errorcode.ServiceErrorCodeConstants;
import com.example.lotterysystem.common.exception.ServiceException;
import com.example.lotterysystem.service.PictureService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Component
public class PictureServiceImpl implements PictureService {
    // 获取图片存放位置
    @Value("${pic.local-path}")
    private String picLocalPath;

    @Override
    public String savePicture(MultipartFile picFile) {
        // 判断图片文件是否为空
        if (picFile.isEmpty()) {
            throw new ServiceException(ServiceErrorCodeConstants.PIC_IS_EMPTY);
        }
        // 找到存放路径
        File dir = new File(picLocalPath);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        // 获取文件名
        String fileName = picFile.getOriginalFilename();
        //判断是否为指定格式文件(文件后缀为 .jpg .jpeg 或 .png)
        String suffixName = fileName.substring(fileName.lastIndexOf(".")); // 获取文件后缀名
        if (suffixName == null
                || !(suffixName.toLowerCase().equals(".jpg")
                || suffixName.toLowerCase().equals(".jpeg")
                || suffixName.toLowerCase().equals(".png"))) {
            throw new ServiceException(ServiceErrorCodeConstants.PIC_TYPE_ERROR);
        }
        // 重命名文件
        fileName = UUID.randomUUID().toString() + suffixName;
        // 保存文件
        try {
            picFile.transferTo(new File(picLocalPath + "/" + fileName));
        } catch (IOException e) {
            throw new ServiceException(ServiceErrorCodeConstants.PIC_UPLOAD_ERROR);
        }
        // 返回文件索引
        return fileName;
    }
}
